package com.woniuxy.rabbitmq.producterconfirm;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author: 15489  <br/>
 * Date: 2022/4/2:14:09  <br/>
 * Description:
 */

public class ComfirmPublishCustomer {
    public static void main(String[] args) throws IOException, TimeoutException {
//        1:工厂
        ConnectionFactory factory=new ConnectionFactory();

//       2:参数
        factory.setHost("192.168.58.128"); //ip
        factory.setPort(5672);             //端口
        factory.setUsername("admin");       //账号
        factory.setPassword("admin");       //密码
        factory.setVirtualHost("/test");   // 虚拟机名字
//        3：创建连接
        Connection connection = factory.newConnection();

//        4:创建一个通道
        Channel channel = connection.createChannel();



//        5:声明或连接消息队列
        channel.queueDeclare("publish_a",true,false,false,null);
//        5.2 创建或者连接上交换机
        channel.exchangeDeclare("publish_exchange_a","fanout") ;
//        5.3绑定交换机 和消息队列
//        参数一消息队列明
//        参数二 交换机的名字
//        参数三 路由
        channel.queueBind("publish_a","publish_exchange_a","");



//        6:创建rabbitmq的 消费对象 接受消息
        Consumer consumer=new DefaultConsumer(channel){
//            接受处理消息的方法
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者"+new String(body));
            }
        };


//        7:接受消息
//        参数一 消息队列的名字
//        参数二 是否确认收到消息 如果是true表示确认 消息队列会将该消息散出 如果是false 不删除
//        参数三
        channel.basicConsume("publish_a",true,consumer);

//        关闭
//        connection.close();


    }
}
